/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.gob.mh.dgii.ssc.terceros.controller;


import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import sv.gob.mh.dgii.common.PagedResult;
import sv.gob.mh.dgii.model.DeTerceroServicio;
import sv.gob.mh.dgii.ssc.terceros.controller.form.TercerosForm;
import sv.gob.mh.dgii.model.RcRuc;
import sv.gob.mh.dgii.model.DeTercero;
import sv.gob.mh.dgii.service.rc.RcRucService;
import sv.gob.mh.dgii.service.terceros.DeTerceroService;

//import sv.gob.mh.dgii.service.terceros.DeTerceroService;
import sv.gob.mh.dgii.ssc.controller.configuration.HomeController;
@Controller
@RequestMapping(value = "/terceros")
@SessionAttributes({"tercerosForm"})

/**
 *
 * @author Nancy
 */
public class TercerosController {
     private final static Log log = LogFactory.getLog(TercerosController.class);
    private final static String PREFIX = "/terceros/";
  
    @Autowired
    private RcRucService rcRucService;
    @Autowired
    private DeTerceroService deterceroservice;
        
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) 
       {
            // inicializar el form
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }        
       
        return PREFIX + "indextercero";
    }

   
    @RequestMapping(value= "autorizar")
    public String index1(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) {
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }
               return PREFIX + "autorizacion_revocacion";
    }
     
    
    @RequestMapping(value= "autorizacion")
    public String index2(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) {
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }
               return PREFIX + "autorizar1";
    }

    @RequestMapping(value= "revocacion")
    public String index3(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) {
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }
               return PREFIX + "menu_revocacion";
    }
    
    @RequestMapping(value= "revocaciontotal")
    public String index4(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) {
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }
               return PREFIX + "revocacion_total";
    }

    
    @RequestMapping(value= "revocacionparcial")
    public String index5(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) {
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }
               return PREFIX + "revocacion_parcial";
    }
    
    @RequestMapping(value= "actuar_tercero")
    public String index6(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) {
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }
               return PREFIX + "actuar_tercero";
    }
    
    @RequestMapping(value= "consulta_tercero1")
    public String index7(Model model) {
        TercerosForm tercerosForm = (TercerosForm) model.asMap().get("tercerosForm");
        if (tercerosForm == null) {
            tercerosForm = new TercerosForm();
            model.addAttribute("tercerosForm", tercerosForm);
        }
               return PREFIX + "consulta_tercero";
    }
    
    
    
    @RequestMapping(value = "/{nit}/findNit")
    public String findNit(@PathVariable(value = "nit") String nit,
            @ModelAttribute(value = "tercerosForm") TercerosForm tercerosForm) {
        if (tercerosForm != null) 
        {
            tercerosForm.clearErrores();
            if (nit != null && nit.trim().equals("error")) 
            {
                 tercerosForm.clearErrores();
               
                
            } else if (nit != null && !nit.trim().equals("")) {
                RcRuc contrib = (RcRuc) rcRucService.findById(nit);
                tercerosForm.setContribuyente(contrib);
            }
        }
        //return PREFIX + "autorizar1";
        return PREFIX + "servicio";
    }

    @RequestMapping(value = "/ejecutar", method = RequestMethod.POST)
    public String ejecutar(Model model,
            @RequestParam(value = "accion", required = false) String accion,
            @ModelAttribute(value = "tercerosForm") TercerosForm tercerosForm) {
        if (tercerosForm != null) {
            if (accion != null) {
                if ("findNit".equals(accion)) {
                    findNit(tercerosForm);
            }
        }                }
         
        //return "redirect:/servicio/";
         return PREFIX + "servicio";
    }

    protected void findNit(TercerosForm tercerosForm) {
        try {
            if (tercerosForm.getContribuyente() != null
                    && tercerosForm.getContribuyente().getNit() != null) {
                RcRuc contrib = (RcRuc) rcRucService.findById(tercerosForm.getContribuyente().getNit());
                tercerosForm.setContribuyente(contrib);
            }
        } catch (Exception e) {
        }
    }
    
       @RequestMapping(value= "/servicio")
    public String Servicio(@ModelAttribute(value = "tercerosForm") TercerosForm tercerosForm) {
        if (tercerosForm != null) 
        {
//            List<DeTerceroServicio> servicio = (List<DeTerceroServicio>)deTerceroServicioService.getServicio();
//          
//             tercerosForm.setServicios(servicio);
        }       
        return PREFIX + "servicio";
    }
    
       //--------------------------------------------- * Revocacion * ------------------------------------------------
       @RequestMapping(value = "/revocarsel", method = RequestMethod.POST)
        public String revocar(Model model,
                @RequestParam(value = "accion", required = false) String accion,
                @ModelAttribute(value = "tercerosForm") TercerosForm tercerosForm) {
           System.out.println("*** Primer paso de revocacion..."); 
           if (tercerosForm != null) {
                if (accion != null) {
                    System.out.println("***** Form no nulo!!..."); 
//                    if ("findNit".equals(accion)) {
//                        findAllT(tercerosForm);
                    
                    HomeController user =new HomeController();
                    String usuario=user.getUsuario();
                    List<DeTercero> el_tercero = (List<DeTercero>) deterceroservice.getDeTercero(usuario);
                    tercerosForm.setlTercero(el_tercero);
//                    }
                }                
           }
           
           //return "redirect:/servicio/";
           return PREFIX + "revocacion_total";
        }
       
       
//        //--- * Creacion de tablas para revocacion de terceros * ---
//       @RequestMapping(value="/revocarsel")
//       public String findAllT(@ModelAttribute(value="tercerosForm") TercerosForm tercerosForm) {
//        try {
//
//            List<DeTercero> el_tercero = (List<DeTercero>) deterceroservice.getDeTercero();
//            tercerosForm.setTerceroList(el_tercero);
//            
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//            return PREFIX + "revocacion_total";
//        
//        }
    
}
